﻿#define _CRT_SECURE_NO_WARNINGS 1

//给定两个排序后的数组 A 和 B，其中 A 的末端有足够的缓冲空间容纳 B。
//  编写一个方法，将 B 合并入 A 并排序。
//
//初始化 A 和 B 的元素数量分别为 m 和 n。
//
//示例 :
//
//输入:
//A = [1, 2, 3, 0, 0, 0], m = 3
//B = [2, 5, 6], n = 3
//
//输出 : [1, 2, 2, 3, 5, 6]

int cmp(int* a, int* b) {
    return *a - *b;
}

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    for (int i = 0; i != n; ++i) {
        nums1[m + i] = nums2[i];
    }
    qsort(nums1, nums1Size, sizeof(int), cmp);
}


//给定一个整数数组，找出总和最大的连续数列，并返回总和。
//
//示例：
//
//输入：[-2, 1, -3, 4, -1, 2, 1, -5, 4]
//输出： 6
//解释： 连续子数组[4, -1, 2, 1] 的和最大，为 6。

int maxSubArray(int* nums, int numsSize) {
    int pre = 0, maxAns = nums[0];
    for (int i = 0; i < numsSize; i++) {
        pre = fmax(pre + nums[i], nums[i]);
        maxAns = fmax(maxAns, pre);
    }
    return maxAns;
}
